package com.zhaoyu.wemedia.service.impl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhaoyu.common.constants.NewsAutoScanConstants;
import com.zhaoyu.common.constants.WemediaConstants;
import com.zhaoyu.common.fastdfs.FastDFSClient;
import com.zhaoyu.model.admin.dtos.NewsAuthDto;
import com.zhaoyu.model.common.dtos.PageResponseResult;
import com.zhaoyu.model.common.dtos.ResponseResult;
import com.zhaoyu.model.common.enums.AppHttpCodeEnum;
import com.zhaoyu.model.media.dtos.WmNewsDto;
import com.zhaoyu.model.media.dtos.WmNewsPageReqDto;
import com.zhaoyu.model.media.pojos.WmMaterial;
import com.zhaoyu.model.media.pojos.WmNews;
import com.zhaoyu.model.media.pojos.WmNewsMaterial;
import com.zhaoyu.model.media.pojos.WmUser;
import com.zhaoyu.model.media.vo.WmNewsCheckVO;
import com.zhaoyu.utils.threadlocal.WmThreadLocalUtils;
import com.zhaoyu.wemedia.mapper.WmMaterialMapper;
import com.zhaoyu.wemedia.mapper.WmNewsMapper;
import com.zhaoyu.wemedia.mapper.WmNewsMaterialMapper;
import com.zhaoyu.wemedia.mapper.WmUserMapper;
import com.zhaoyu.wemedia.service.WmNewsService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;

/**
 * IService 实现类（泛型：M 是 mapper 对象，T 是实体）
 */
@Service
public class WmNewsServiceImpl extends ServiceImpl<WmNewsMapper, WmNews> implements WmNewsService {

    @Autowired
    private FastDFSClient fastDFSClient; // FastDFS工具类

    @Value("${fileServerUrl}")
    private String fileServerUrl; // 图片服务器地址

    @Autowired
    private WmMaterialMapper wmMaterialMapper;

    @Autowired
    private WmNewsMaterialMapper wmNewsMaterialMapper;

    @Autowired
    private KafkaTemplate<String,Object> kafkaTemplate;

    @Autowired
    private WmNewsMapper wmNewsMapper;

    @Autowired
    private WmUserMapper wmUserMapper;

    @Override
    public ResponseResult uploadImage(MultipartFile file) {
        try {
            if (file == null) { // 判断文件是否为空
                return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_REQUIRE);
            }
            String originalFilename = file.getOriginalFilename();
            if (originalFilename == null || "".equals(originalFilename)) { // 判断文件名是否为空
                return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
            }
            String uploadFile = fastDFSClient.uploadFile(file); // 上传图片到FastDFS服务器
            String picUrl = fileServerUrl + uploadFile; // 图片服务器地址 + FastDFS服务器上传图片路径
            WmNews wmNews = new WmNews(); // 自媒体图文内容信息表
            wmNews.setUserId(WmThreadLocalUtils.getUserId()); // 自媒体用户ID
            wmNews.setTitle("我是赵宇!!!"); // 标题
            wmNews.setContent("[]"); // 图文内容
            wmNews.setType((short)1); // 文章布局：0 无图文章、1 单图文章、3 多图文章
            wmNews.setChannelId(1); // 图文频道ID
            wmNews.setLabels("我是赵宇!!!");
            wmNews.setCreatedTime(new Date()); // 创建时间
            wmNews.setSubmitedTime(new Date()); // 提交时间
            wmNews.setStatus((short)1); // 当前状态 0 草稿、1 提交(待审核)、2 审核失败、3 人工审核、4 人工审核通过、8 审核通过(待发布)、9 已发布
            wmNews.setReason("审核成功"); // 拒绝理由
            wmNews.setImages(uploadFile); // 文章封面图片
            wmNews.setEnable((short)1); // enable：0下架,1上架
            save(wmNews); // 保存自媒体图文内容信息表
            return ResponseResult.okResult(picUrl); // 返回图片路径
        } catch (IOException e) {
            e.printStackTrace();
        }
        return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
    }

    @Override
    public ResponseResult findAll(WmNewsPageReqDto wmNewsPageReqDto) {
        /**
         * 请求参数是null,默认查第一页
         */
        if (wmNewsPageReqDto == null){
            wmNewsPageReqDto = new WmNewsPageReqDto();
        }
        /**
         * 获取默认的分页信息
         */
        wmNewsPageReqDto.checkParam();
        /**
         * 条件
         */
        Page page = new Page<WmNews>(wmNewsPageReqDto.getPage(), wmNewsPageReqDto.getSize());
        LambdaQueryWrapper<WmNews> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        // 状态精确查询
        if (wmNewsPageReqDto.getStatus() != null){
            /**
             * 当前状态
             0 草稿
             1 提交（待审核）
             2 审核失败
             3 人工审核
             4 人工审核通过
             8 审核通过（待发布）
             9 已发布
             */
            lambdaQueryWrapper.eq(WmNews::getStatus, wmNewsPageReqDto.getStatus()); // WmNews::getStatus：状态
        }
        // 频道精确查询
        if (wmNewsPageReqDto.getChannelId() != null){
            lambdaQueryWrapper.eq(WmNews::getChannelId, wmNewsPageReqDto.getChannelId()); // WmNews::getChannelId：图文频道ID
        }
        // 时间范围查询
        if (wmNewsPageReqDto.getBeginPubDate() != null && wmNewsPageReqDto.getEndPubDate() != null) {
            lambdaQueryWrapper.between(WmNews::getCreatedTime, wmNewsPageReqDto.getBeginPubDate(), wmNewsPageReqDto.getEndPubDate()); // WmNews::getCreateTime：创建时间
        }
        // 关键字模糊查询
        if (wmNewsPageReqDto.getKeyword() != null) {
            lambdaQueryWrapper.like(WmNews::getTitle, wmNewsPageReqDto.getKeyword()); // WmNews::getTitle：标题
        }
        // 查询当前登录用户的信息
        Integer userId = WmThreadLocalUtils.getUserId();
        if (userId == null){
            return ResponseResult.errorResult(AppHttpCodeEnum.NEED_LOGIN);
        }
        lambdaQueryWrapper.eq(WmNews::getUserId, userId); // WmNews::getUserId：自媒体用户ID
        // 按照创建日期倒序
        lambdaQueryWrapper.orderByDesc(WmNews::getCreatedTime);
        IPage result = page(page, lambdaQueryWrapper);
        /**
         * 当前页(默认第一页)：getCurrent
         * 当前页总页数：getSize
         * 总条数：getTotal
         * 分页对象记录列表：getRecords
         * 封装结果
         */
        ResponseResult responseResult = new PageResponseResult((int) result.getCurrent(), (int) result.getSize(), (int) result.getTotal());
        responseResult.setData(result.getRecords());
        responseResult.setHost(fileServerUrl);
        return responseResult;
    }

    /**
     测试(postman)
     {
     "channelId": 1,
     "content": "[{\"type\":\"text\",\"value\":\"howareyou随着智能手机的普及,人们更加习惯于通过手机来看新闻。由于生活节奏的加快,很多人只能利用碎片时间来获取,因此,对于移动资讯客户端的需求也越来越高。积云头条项目正是在这样背景下开发出来。积云头条项目采用当下火热微服务+大数据技术架构实现。本项目主要着手于获取最新最热新闻资讯,通过大数据分析用户喜好精确推送咨询新\"},{\"type\":\"image\",\"value\":\"http://192.168.58.138/group1/M00/00/00/wKg6imKmxbSAFGIIAARxl46YKs0824.gif\"}]",
     "images": ["http://192.168.58.138/group1/M00/00/00/wKg6imKmxbSAFGIIAARxl46YKs0824.gif"],
     "labels": "赵宇0701头条",
     "publishTime": 1648694998531,
     "status": 1,
     "title": "赵宇头条项目背景",
     "type": 1
     }
     */
    @Override
    @Transactional // 本地事务
    public ResponseResult saveWmNews(WmNewsDto wmNewsDto, Short status) {
        // 检查参数
        if (wmNewsDto == null || StringUtils.isEmpty(wmNewsDto.getContent())){ // 内容不能为空
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_REQUIRE);
        }
        // 保存或修改文章
        WmNews wmNews = new WmNews();
        BeanUtils.copyProperties(wmNewsDto, wmNews); // 拷贝属性/将所有的对象放到WmNews
        // 判文章中是否有图
        if (WemediaConstants.WM_NEWS_TYPE_AUTO.equals(wmNewsDto.getType())){
            /**
             * 文章主图类型
                 *      0 无图 WM_NEWS_NONE_IMAGE
                 *      1 单图 WM_NEWS_SINGLE_IMAGE
                 *      3 多图 WM_NEWS_MANY_IMAGE
                 *     -1 自动 WM_NEWS_TYPE_AUTO
             */
            wmNews.setType(null);
        }
        // 有图的话,将他们拼接在一起 图片替换
        if (wmNewsDto.getImages() != null && wmNewsDto.getImages().size() > 0){
            // 主图图片列表(文章封面图片) 多张图以逗号隔开
            wmNews.setImages(wmNewsDto.getImages().toString().replace("[", "")
                    .replace("]", "").replace(fileServerUrl, "")
                    .replace(" ", ""));
        }
        // 保存或修改文章
        addWmNews(wmNews, status);
        // 关联内容与素材的关系
        String content = wmNewsDto.getContent(); // 文章内容
        List<Map> list = JSON.parseArray(content, Map.class); // 转Map格式
        List<String> materials = ectractUrlInfo(list);// 提取图片信息
        // 保存素材与文章内容的关系
        /**
         * 当前状态
             0 草稿 NORMAL
             1 提交(待审核) SUBMIT
             2 审核失败 FAIL
             3 人工审核 ADMIN_AUTH
             4 人工审核通过 ADMIN_SUCCESS
             8 审核通过(待发布) SUCCESS
             9 已发布 PUBLISHED
         */
        if (status == WmNews.Status.SUBMIT.getCode() && materials.size() != 0){
            ResponseResult responseResult = saveRelativeInfoForContent(materials,wmNews.getId());
            if (responseResult != null){
                return responseResult;
            }
        }
        // 主图的图片和素库的关系
        if (status == WmNews.Status.SUBMIT.getCode() && materials.size() != 0){
            ResponseResult responseResult = saveRelativeInfoForCover(wmNewsDto,materials,wmNews);
            if (responseResult != null){
                return responseResult;
            }
        }
        return null;
    }

    /**
     * 设置主图图片与素材的关系
     */
    private ResponseResult saveRelativeInfoForCover(WmNewsDto wmNewsDto,List<String> materials,WmNews wmNews) {
        List<String> images = wmNewsDto.getImages();
        // 自动匹配主图
        if (wmNewsDto.getType().equals(WemediaConstants.WM_NEWS_TYPE_AUTO)){
            // 内容中的图片数量小于等于2,设置为单图
            if(materials.size()> 0 && materials.size() <= 2){
                wmNews.setType(WemediaConstants.WM_NEWS_SINGLE_IMAGE); // 单图
                images = materials.stream().limit(1).collect(Collectors.toList());
            }else if (materials.size() > 2){
                // 内容中的图片数量大于2,设置为多图
                wmNews.setType(WemediaConstants.WM_NEWS_MANY_IMAGE); // 多图
                images = materials.stream().limit(3).collect(Collectors.toList());
            }else {
                // 内容中的图片数量为0,设置为无图
                wmNews.setType(WemediaConstants.WM_NEWS_NONE_IMAGE); // 无图
            }
            // 修改文章信息
            if (images != null && images.size() > 0){
                // 主图图片列表(文章封面图片) 多张图以逗号隔开
                wmNews.setImages(images.toString().replace("[", "")
                        .replace("]", "").replace(fileServerUrl, "")
                        .replace(" ", ""));
            }
            updateById(wmNews);
        }
        // 保存主图图片与素材的关系
        if (images != null && images.size() >0){
            ResponseResult responseResult = saveRelativeInfoForImage(images,wmNews.getId());
            if (responseResult != null){
                return responseResult;
            }
        }
        return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
    }

    /**
     * 保存主图和图片的关系
     */
    private ResponseResult saveRelativeInfoForImage(List<String> images,Integer newsId) {
        List<String> materials = new ArrayList<>();
        for (String image : images) {
            materials.add(image.replace(fileServerUrl,""));
        }
        return saveRelativeInfo(materials,newsId,WemediaConstants.WM_COVER_REFERENCE);
    }

    /**
     * 保存素材与文章内容的关系
     */
    private ResponseResult saveRelativeInfoForContent(List<String> materials,Integer newsId) {
        // 保存关系
        return saveRelativeInfo(materials,newsId,WemediaConstants.WM_CONTENT_REFERENCE);
    }

    /**
     * 保存关系
     */
    private ResponseResult saveRelativeInfo(List<String> materials,Integer newsId,Short type) {
        // 获取数据库中的素材信息
        LambdaQueryWrapper<WmMaterial> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.in(WmMaterial::getUrl, materials);
        lambdaQueryWrapper.eq(WmMaterial::getUserId, WmThreadLocalUtils.getUserId());
        List<WmMaterial> dbMaterials = wmMaterialMapper.selectList(lambdaQueryWrapper);
        // 通过图片的路径获取素材的id
        List<String> materialsIds = new ArrayList<>();
        if (dbMaterials != null && dbMaterials.size() > 0){
            Map<String, Integer> urlIdMap = dbMaterials.stream().collect(Collectors.toMap(WmMaterial::getUrl, WmMaterial::getId));
            for (String material : materials) {
                String materialId = String.valueOf(urlIdMap.get(material));
                // 没找到素材的id
                if (StringUtils.isEmpty(materialId)){
                    return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID,"应用图片失效");
                }
                // 找到素材的id
                materialsIds.add(materialId);
            }
        }
        // 批量保存数据
        wmNewsMaterialMapper.saveRelationsByContent(materialsIds,newsId,type);
        return null;
    }

    /**
     * 提取图片信息
     */
    private List<String> ectractUrlInfo(List<Map> list) {
        List<String> materials = new ArrayList<>();
        for (Map map : list) {
            if (map.get("type").equals(WemediaConstants.WM_NEWS_TYPE_IMAGE)){ // "type":"image"
                String imgUrl =(String) map.get("value"); // "value":"http://192.168.58.138/group1/M00/00/00/wKg6imKowiWAMwIeAARxl46YKs0853.gif"
                imgUrl = imgUrl.replace(fileServerUrl, "");
                materials.add(imgUrl);
            }
        }
        return materials;
    }

    /**
     * 保存或修改文章[kafka]
     */
    private void addWmNews(WmNews wmNews, Short status) {
        wmNews.setStatus(status); // 状态
        wmNews.setUserId(WmThreadLocalUtils.getUserId()); // 自媒体用户id
        wmNews.setCreatedTime(new Date()); // 创建时间
        wmNews.setSubmitedTime(new Date()); // 提交时间
        wmNews.setEnable((short)1); // enable：0下架,1上架
        boolean flag = false; // [kafka]
        // 判断该新闻是否存在,不能存在保存,存在修改
        if (wmNews.getId() == null){
            flag = save(wmNews); // [kafka]
            // save(wmNews);
        }else{
            // 查询改新闻id对应的素材表信息,删除
            LambdaQueryWrapper<WmNewsMaterial> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(WmNewsMaterial::getNewsId, wmNews.getId());
            wmNewsMaterialMapper.delete(queryWrapper);
            // 然后修改新闻表
            flag = updateById(wmNews); // [kafka]
            // updateById(wmNews);
        }
        // 发消息[kafka]
        if (flag){
            kafkaTemplate.send(NewsAutoScanConstants.WM_NEWS_AUTO_SCAN_TOPIC,JSON.toJSONString(wmNews.getId()));
        }
    }

//    @Override
//    @Transactional // 本地事务
//    public ResponseResult saveWmNews(WmNewsDto wmNews,Short status) {
//        if (wmNews == null || wmNews.getContent().isEmpty()) return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_REQUIRE);
//        WmNews news = new WmNews();
//        // 将前端传过来的内容赋值到要保存到表里的对象
//        BeanUtils.copyProperties(wmNews,news); // 拷贝属性/将所有的对象放到news
//        if (WemediaConstants.WM_NEWS_TYPE_AUTO.equals(wmNews.getType())) {
//            news.setType(null);
//        }
//        if (wmNews.getImages() != null && wmNews.getImages().size() != 0) {
//            StringBuffer buffer = new StringBuffer();
//            wmNews.getImages().forEach(s -> buffer.append(s.replace(fileServerUrl,"")).append(","));
//            news.setImages(buffer.toString().substring(0, buffer.toString().length() - 1));
//        }
//        news.setStatus(status);
//        Integer userId = WmThreadLocalUtils.getUserId();
//        news.setUserId(userId);
//        news.setCreatedTime(new Date());
//        news.setSubmitedTime(new Date());
//        news.setEnable((short) 1);
//        // 对象字段赋值完成后,还有两件事1,确定素材和新闻的关系 2,保存新闻
//        if (news.getId() == null) { // 以前没有这个文章,新增文章
//            save(news);
//        } else { // 有id说明是修改文章
//            // 删除关系表中新闻和素材的关系数据
//            wmNewsMaterialMapper.delete(Wrappers.<WmNewsMaterial>lambdaQuery().eq(WmNewsMaterial::getNewsId, news.getId()));
//            // 更新修改的内容
//            updateById(news);
//        }
//        // 将前端传过来的新闻内容中的资源提取出来保存到集合中
//        String content = wmNews.getContent();
//        List<String> materialList = new ArrayList<>();
//        JSONArray array = JSON.parseArray(content);
//        array.forEach(m -> {
//            JSONObject object = JSON.parseObject(m.toString());
//            if (object.get("type").equals(WemediaConstants.WM_NEWS_TYPE_IMAGE)) {
//                materialList.add(object.get("value").toString().replace(fileServerUrl, ""));
//            }
//        });
//        if (status == WmNews.Status.SUBMIT.getCode()) {
//            if (materialList.size() != 0) { // 保存新闻内容中素材和新闻的关系
//                ResponseResult responseResult = saveRelativeInfoForContent(materialList, news.getId());
//                if (responseResult != null) {
//                    return responseResult;
//                }
//            }
//            // 保存主图资源和新闻的关系数据
//            ResponseResult responseResult = saveRelativeInfoForCover(wmNews, materialList, news);
//            if (responseResult != null) {
//                return responseResult;
//            }
//        }
//        return null;
//    }
//
//    /**
//     * 保存主图资源和新闻的关系数据
//     *
//     * @param wmNews       前端传过来的新闻对象
//     * @param materialList 包含所有详情内容资源路劲的集合
//     * @param news         要更新或保存到表里的新闻对象
//     * @return
//     */
//    private ResponseResult saveRelativeInfoForCover(WmNewsDto wmNews, List<String> materialList, WmNews news) {
//        // 前端传过来的主图图集合
//        List<String> images = wmNews.getImages();
//        // 如果前端再提交数据时,主图选择的是自动
//        if (wmNews.getType() == WemediaConstants.WM_NEWS_TYPE_AUTO) {
//            if (materialList.size() == 0) { // 无图模式
//                news.setType(WemediaConstants.WM_NEWS_NONE_IMAGE);
//            } else if (materialList.size() <= 2) { // 单图模式
//                news.setType(WemediaConstants.WM_NEWS_SINGLE_IMAGE);
//                if (images == null) images = new ArrayList<>();
//                images.clear();
//                images.add(materialList.get(0));
//            } else { // 多图模式
//                news.setType(WemediaConstants.WM_NEWS_MANY_IMAGE);
//                images = materialList.stream().limit(3).collect(Collectors.toList());
//            }
//            // 更新已保存的新闻表中主图图的数据
//            if (images.size() != 0)
//                news.setImages(images.toString().replace("[", "")
//                        .replace("]", "").replace(fileServerUrl, "")
//                        .replace(" ", ""));
//            updateById(news);
//        }
//        if (images != null && images.size() > 0) {
//            images = images.stream().map(i->i.replace(fileServerUrl,"")).collect(Collectors.toList());
//            ResponseResult responseResult = saveRelativeInfo(images, news.getId(),WemediaConstants.WM_COVER_REFERENCE);
//            if (responseResult != null) {
//                return responseResult;
//            }
//        }
//        return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
//    }
//
//    /**
//     * 保存新闻内容中素材和新闻的关系
//     *
//     * @param materialList
//     * @param id
//     * @return
//     */
//    private ResponseResult saveRelativeInfoForContent(List<String> materialList, Integer id) {
//        return saveRelativeInfo(materialList, id, WemediaConstants.WM_CONTENT_REFERENCE);
//    }
//
//    /**
//     * 具体执行中间关系表的数据插入
//     *
//     * @param materialList       内容中引用的资源路劲集合
//     * @param id                 新闻id
//     * @param wmContentReference 引用类型,当前是内容引用
//     * @return
//     */
//    private ResponseResult saveRelativeInfo(List<String> materialList, Integer id, Short wmContentReference) {
//        List<WmMaterial> list = wmMaterialMapper.selectList(Wrappers.<WmMaterial>lambdaQuery().in(WmMaterial::getUrl, materialList));
//        if (list == null || list.size() == 0) return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID, "资源错误");
//        List<String> idList = new ArrayList<>();
//        list.forEach(l -> idList.add(l.getId().toString()));
//        wmNewsMaterialMapper.saveRelationsByContent(idList, id, wmContentReference);
//        return null;
//    }

    @Override
    public ResponseResult findWmNewsById(Integer id) {
        // 检查参数
        if (id == null){
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_REQUIRE);
        }
        // 根据ID查询文章
        WmNews wmNews = getById(id);
        if (wmNews == null){
            return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST,"文章不存在");
        }
        // 结果返回
        ResponseResult responseResult = ResponseResult.okResult(wmNews);
        responseResult.setHost(fileServerUrl);
        return responseResult;
    }

    @Override
    public ResponseResult deleteWmNews(Integer id) {
        // 检查参数
        if (id == null){
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_REQUIRE);
        }
        // 根据ID查询文章
        WmNews wmNews = getById(id);
        if (wmNews == null){
            return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST,"文章不存在");
        }
        // 判断当前文章的状态 status == 9[已发布]和enable == 1[上架]
        if(wmNews.getStatus().equals(WmNews.Status.PUBLISHED.getCode()) && wmNews.getEnable().equals(WemediaConstants.WM_NEWS_SINGLE_IMAGE)){
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID,"文章已发布,不能删除");
        }
        // 去除素材与文章的关系
        wmNewsMaterialMapper.delete(Wrappers.<WmNewsMaterial>lambdaQuery().eq(WmNewsMaterial::getNewsId, wmNews.getId()));
        // 删除文章
        removeById(wmNews.getId());
        return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
    }

    @Override
    public ResponseResult downOrUpWmNews(WmNewsDto wmNewsDto) {
        // 检查参数
        if (wmNewsDto == null || wmNewsDto.getId() == null){
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_REQUIRE);
        }
        // 根据ID查询文章
        WmNews wmNews = getById(wmNewsDto.getId());
        if (wmNews == null){
            return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST,"文章不存在");
        }
        // 判断文章是否发布
        /**
             * 当前状态
             0 草稿 NORMAL
             1 提交(待审核) SUBMIT
             2 审核失败 FAIL
             3 人工审核 ADMIN_AUTH
             4 人工审核通过 ADMIN_SUCCESS
             8 审核通过(待发布) SUCCESS
             9 已发布 PUBLISHED
         */
        if (!wmNews.getStatus().equals(WmNews.Status.PUBLISHED.getCode())){
            return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST,"文章未发布,不能上架");
        }
        // 修改文章状态,同步到app端(后期做)TODO
        if (wmNewsDto.getEnable() != null && wmNewsDto.getEnable() > -1 && wmNews.getEnable() < 2){
            if (wmNews.getArticleId() != null){
                Map<String,Object> messageMap = new HashMap<>();
                messageMap.put("enable",wmNewsDto.getEnable());
                messageMap.put("articleId",wmNews.getArticleId());
                kafkaTemplate.send(NewsAutoScanConstants.WM_NEWS_UP_OR_DOWN_TOPIC,JSON.toJSONString(messageMap));
            }
            update(Wrappers.<WmNews>lambdaUpdate().eq(WmNews::getId, wmNewsDto.getId()).set(WmNews::getEnable, wmNewsDto.getEnable()));
        }
        return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
    }

    @Override
    public List<Integer> findReleaseWmNews() {
        // 查询文章状态为8且发布时间小于当前时间的文章id列表
        List<WmNews> list = list(Wrappers.<WmNews>lambdaQuery().eq(WmNews::getStatus, 8).
                            lt(WmNews::getPublishTime,new Date()));
        List<Integer> resultList = list.stream().map(WmNews::getId).collect(Collectors.toList());
        return resultList;
    }

    @Override
    public ResponseResult findListWmNews(NewsAuthDto newsAuthDto) {
        /**
         * 请求参数是null,默认查第一页
         */
        if (newsAuthDto == null){
            newsAuthDto = new NewsAuthDto();
        }
        /**
         * 获取默认的分页信息
         */
        newsAuthDto.checkParam();
        /**
         * 设置起始页
         */
        newsAuthDto.setPage((newsAuthDto.getPage() - 1) * newsAuthDto.getSize());
        newsAuthDto.setTitle("%" + newsAuthDto.getTitle() + "%");
        /**
         * 分页查询
         */
        List<WmNewsCheckVO> list = wmNewsMapper.findListAndPage(newsAuthDto);
        /**
         * 统计多少条数据
         */
        int count = wmNewsMapper.findListCount(newsAuthDto);
        /**
         * 结果返回
         */
        ResponseResult responseResult = new PageResponseResult(newsAuthDto.getPage(), newsAuthDto.getSize(), count);
        responseResult.setData(list);
        return responseResult;
    }

    @Override
    public WmNewsCheckVO findWmNewsCheckVO(Integer id) {
        // 查询文章内容信息
        WmNews wmNews = getById(id);
        // 查询自媒体用户
        WmUser wmUser = null;
        if (wmNews != null && wmNews.getUserId() != null){
            wmUser = wmUserMapper.selectById(wmNews.getUserId());
        }
        // 封装vo信息返回
        WmNewsCheckVO wmNewsCheckVO = new WmNewsCheckVO();
        BeanUtils.copyProperties(wmNews,wmNewsCheckVO); // 拷贝属性/将所有的对象放到wmNewsCheckVO
        if (wmUser != null){
            wmNewsCheckVO.setAuthName(wmUser.getName());
        }
        return wmNewsCheckVO;
    }

}